package manage.controller;

import manage.domain.Student;
import manage.service.StudentService;

import java.util.Scanner;

public abstract class BaseStudentController {
    //将创建的对象放在类中可以减少代码复用性
    StudentService studentService = new StudentService();
    Scanner sc = new Scanner(System.in);//创建键盘输入对象

    //学生管理系统启动方法
    public void start() {
        //Scanner sc = new Scanner(System.in);
        StudentLoop:
        while (true) {
            System.out.println("--------------------欢迎来到学生信息管理系统------------------");
            System.out.println("请输入您的选择：1、添加学生信息  2、删除学生信息  3、修改学生信息  4、查看学生信息  5、退出");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    deleteStudentById();
                    break;
                case 3:
                    upadateStudent();
                    break;
                case 4:
                    finAllStudent();
                    break;
                case 5:
                    System.out.println("感谢您使用学生管理系统！");
                    break StudentLoop;
            }
        }
    }

    //修改学生信息
    public void upadateStudent() {
        String updateId = isExistsStuId();
        Student newStu = inputStuInfo(updateId);//重复较多的代码使用方法封装下再调用
        studentService.updateStudent(updateId, newStu);//将用户需要修改的学生Id和封装对象传给service层
        System.out.println("修改成功！");
    }

    //删除学生信息
    public void deleteStudentById() {
        String delId = isExistsStuId();
        studentService.deleteStudentById(delId);
        System.out.println("删除成功！");
    }

    //查找所有的学生
    public void finAllStudent() {
        Student[] stus = studentService.findAllStudent();//因为返回的是student数组，所以用student数组接收
        if (stus == null) {//如果数组为空，提示添加信息
            System.out.println("查无信息，请添加后再查看！");
            return;//结束当前代码，不再向下执行
        }
        System.out.println("学号\t姓名\t年龄\t生日");
        for (int i = 0; i < stus.length; i++) {
            Student stu = stus[i];
            if (stu != null) {
                System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getBirthday());
            }
        }
    }

    //添加学生信息
    public void addStudent() {
        String id;
        while (true) {
            System.out.println("请输入id：");
            id = sc.next();
            //调用isExists方法判断用户输入的id是否已经存在
            boolean flag = studentService.isExists(id);
            if (flag) {
                System.out.println("学号已经存在!");
            } else {
                break;
            }
        }
        Student stu = inputStuInfo(id);//重复较多的代码使用方法封装下再调用
        boolean result = studentService.addStudent(stu);
        //"?" 后面是true返回的信息，"："后面是false返回的信息
        System.out.println(result ? "添加成功！" : "添加失败！");

    }

    //输入学生信息方法（将多次使用的用户输入封装起来，减少代码量）
    public abstract Student inputStuInfo(String id);

    //判断学生的Id是否存在（将重复使用的代码封装）
    public String isExistsStuId() {
        String id;
        while (true) {
            System.out.println("请输入学生id：");
            id = sc.next();
            boolean exist = studentService.isExists(id);
            if (!exist) {
                System.out.println("您输入的学生Id不存在，请重新输入！");
            } else {
                break;
            }
        }
        return id;
    }
}
